package com.zeng.pojo.restmodel;

import com.alibaba.fastjson.JSONObject;
import com.zeng.annotation.restmodel.RestModel;
import com.zeng.annotation.restmodel.RestModelField;
import com.zeng.bean.restmodel.RestQueryParam;
import com.zeng.bean.restmodel.RestTableCreateParam;
import com.zeng.bean.restmodel.RestTableInfo;
import lombok.Data;

/**
 * 自动模型基类
 */
@RestModel
@Data
public class BaseRestModel {

    /**
     * 唯一标识
     */
    @RestModelField(primaryKey = true,autoIncrement = true)
    private Integer id;

    // region DQL DML 生命周期方法

    /**
     * 查询时执行
     * @return 是否继续查询
     */
    public boolean onSelect(RestQueryParam param) { return true; }

    /**
     * 查询后执行，
     * @return 是否保留这条数据
     */
    public boolean onSelected(JSONObject obj){ return true; }

    /**
     * 插入数据时执行
     * @return 是否要让这条数据被插入
     */
    public boolean onInsert(RestQueryParam param) { return true; }

    /**
     * 更新数据时执行
     * @return 是否要让这条数据被更新
     */
    public boolean onUpdate(RestQueryParam param) { return true; }

    /**
     * 删除数据时执行
     * @return 是否要让这条数据被删除
     */
    public boolean onDelete(RestQueryParam param) { return true; }

    // endregion

    // region DDL 生命周期方法

    /**
     * 当表创建时执行
     * @return 是否建表
     */
    public boolean onTableCreate(RestTableCreateParam param) { return true; }

    /**
     * 当表删除时执行
     * @return 是否删除表
     */
    public boolean onTableDrop(RestTableInfo param) { return true; }

    // endregion

}
